import $axios, { Result } from '@/plugins/axios'
import { AxiosResponse } from 'axios'
import { PageParam } from '@/type'

/**
 * 获取用户信息
 * @param param 分页查询参数
 * @returns 用户信息
 */
export async function getAllUserInfo(
  param: PageParam,
): Promise<AxiosResponse<Result>> {
  return await $axios.post('/supervision-api/backUserInfo/getAllUserInfo', {
    ...param,
  })
}

/**
 * 新增/修改后台系统所有账号信息查询
 * @param data 用户信息
 */
export async function saveOrUpdateUserInfo(
  data: any,
): Promise<AxiosResponse<Result>> {
  return await $axios.post(
    '/supervision-api/backUserInfo/saveOrUpdateUserInfo',
    data,
  )
}

/**
 * 停用后台账号-管理员能操作
 * @param id 用户id
 */
export async function deleteUserInfo(
  id: number | string,
): Promise<AxiosResponse<Result>> {
  return await $axios.delete(
    `/supervision-api/backUserInfo/deleteUserInfo/${id}`,
  )
}

/**
 * 管理员能操作-后台系统账户生效激活
 * @param id 用户id
 */
export async function activeUserInfo(
  id: number,
): Promise<AxiosResponse<Result>> {
  return await $axios.get(`/supervision-api/backUserInfo/active/${id}`)
}

/**
 * 重置密码-管理员能操作
 * @param id 用户id
 */
export async function resetPassword(
  id: number,
): Promise<AxiosResponse<Result>> {
  return await $axios.get(`/supervision-api/backUserInfo/resetPassword/${id}`)
}

/**
 * 根据后台用户的ID查询对应的角色和数据权限
 * @param userId
 */
export async function queryRoleDataByUserId(
  userId: number,
): Promise<AxiosResponse<Result>> {
  return await $axios.get(
    `/supervision-api/backUserInfo/queryRoleDataByUserId/${userId}`,
  )
}

/**
 * 获取后台系统所有账号
 */
export async function getAllUser(): Promise<AxiosResponse<Result>> {
  return await $axios.get(`/supervision-api/backUserInfo/getAllUser`)
}

/**
 * 根据部门Id、角色标识符获取对应账号
 * @param data.departmentId 部门id
 * @param data.roleCode 角色标识符
 */
export async function getAllUserByUnitIdAndCode(data: {
  departmentId?: number
  unitId?: number
  roleCode: string
}): Promise<AxiosResponse<Result>> {
  return await $axios.post(
    `/supervision-api/backUserInfo/getAllUserByUnitIdAndCode`,
    data,
  )
}

export enum ESelectApproveUserType {
  DEAL = 3,
  COORDINATION = 2,
  DELAY = 1,
}

export interface INextApproveUserRes {
  id: number
  name: string
  [key: string]: any
}

export type TNextApproveUserRes = INextApproveUserRes[]

export interface IAllApproveUser {
  /**
   * 数据类型 1办理审批、2协调申请、3延期申请
   */
  type?: ESelectApproveUserType
  /**
   * 协调申请、延期申请主键
   */
  applyId?: number
  /**
   * 事项反馈主键
   */
  feedbackId?: number
}
/**
 * 获取下一节点审批人
 * @param params 协调申请业务操作
 */
export async function getNextApproveUser(
  data: IAllApproveUser,
): Promise<AxiosResponse<Result<TNextApproveUserRes>>> {
  return await $axios({
    method: 'post',
    url: '/supervision-api/coordinationApply/getNextApproveUser',
    data,
  })
}
